/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package clases;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Joaquin
 */
public class Mecanico extends Thread {

    private String nombre;
    private Recepcionista recepcionista;
    public static int DESCANSO = 10000;

    public Mecanico(String nombre, Recepcionista recepcionista) {
        this.nombre = nombre;
        this.recepcionista = recepcionista;
    }

    @Override
    public void run() {
        while (recepcionista.hayVehiculoNoReparado()) {

            System.out.print(this.nombre+": Voy a buscar un vehiculo para reparar \n");

            // buscamos un vehiculo para reparar
            Vehiculo vehiculoRoto = recepcionista.obtenerVehiculoAReparar();

            /** Reparamos el vehiculo. El tiempo que demora en repararlo depende
             * de la clase de vehículo. Si es una bicicleta demora entre 12 y 18
             * segundos. En cambio, si es una moto, demora entre 30 y 35
             * segundos.             *
             */
            int tiempoReparacion = 0;
            if (vehiculoRoto instanceof Bicicleta) {
                tiempoReparacion = (int)(Math.random()*6000+12000);
            } else {
                tiempoReparacion = (int)(Math.random()*5000+30000);
            }

            // seteamos el tiempo de reparacion del vehiculo para luego cobrar
            vehiculoRoto.setTiempoReparacion(tiempoReparacion);
            System.out.println(this.nombre+": obtuve una " + vehiculoRoto.toString() +
                    " y voy a tardar " + tiempoReparacion + " ms en arregarla \n");

            // dormimos el tiempo de reparacion
            try {
                sleep(tiempoReparacion);
            } catch (InterruptedException ex) {
                Logger.getLogger(Mecanico.class.getName()).log(Level.SEVERE, null, ex);
            }

            // seteamos el estado del vehiculo como arreglado
            vehiculoRoto.setReparado(true);

            // y se lo devolvemos al recepcionista
            recepcionista.recibirVehiculoReparado(vehiculoRoto);

            System.out.println(this.nombre+": He reparado la " + vehiculoRoto.toString() + "\n");

            // DORMIMOS el descanso
            try {
                sleep(Mecanico.DESCANSO);
            } catch (InterruptedException ex) {
                Logger.getLogger(Mecanico.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }
}
